package db

import "fmt"

// 更新数据
func (db *DB) Change(data map[string]any, where ...[]interface{}) *DB {
	if db.Error != nil {
		return db
	}
	if len(data) <= 0 {
		return db
	}
	gormDB := db.GormDB()
	if len(where) > 0 {
		for _, w := range where {
			db.builderWhere(gormDB, w)
		}
	} else {
		pks, err := db.GetTablePrimaryKeys()
		if err != nil {
			db.setError(err)
			return db
		}
		for _, pk := range pks {
			pkVal, ok := data[pk]
			if !ok {
				db.setError(fmt.Errorf("无更新where条件，且修改数据中未包含主键 %s 数据值", pk))
				return db
			}
			db.builderWhere(gormDB, []interface{}{fmt.Sprintf("`%s` = ?", pk), pkVal})
		}
	}
	res := gormDB.Updates(data)
	db.Error = res.Error
	db.RowsAffected = res.RowsAffected
	return db
}
